<?php
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//							Stats									//
//																//
//   26/03/11 (Filament) : création de la pagee											//
//																//
//   Cette page affiche une image représentant les stats de postage sur DMI							//
//																//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//					APPELS NECESSAIRES SUR TOUTES LES PAGES							//


//Chemin du répertoire courant à la racine
$rep ="../";

//design via phpBB3
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : $rep.'phpBB3/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
include($phpbb_root_path . 'includes/bbcode.' . $phpEx);
require($phpbb_root_path . 'includes/functions_user.' . $phpEx);
require($phpbb_root_path . 'includes/functions_module.' . $phpEx);   

//Les mois concernés :
$mois = "";
for($i = 0; $i < 12; $i++) {

	$this_mois = ((date('m')+$i)%12+1);

	if((date('m')+$i) < 12)
		$this_mois .= (date('Y')-1);
	else
		$this_mois .= (date('Y'));

	if(strlen($this_mois) == 5)
		$this_mois = "0".$this_mois;
	$mois .= $this_mois;
	if($i < 11)
		$mois .= ", ";
}

//La requete SQL :
$select = "SELECT posts, mois
		FROM stats_mois_salon
		WHERE mois IN ($mois)
		AND salon = '".$_GET['salon']."'
		ORDER BY timestamp ASC";
$result = $db->sql_query($select);
$moisFr=array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Decembre');
$resultat=array();
$i=0;
while($row = $db->sql_fetchrow($result))
{
	//Mettre la ligne dans le tableau
    $resultat[$row['mois']]=$row['posts'];
    //Prendre la première quantité vendu comme minimum et maximum
    if($i==0)
		{
			$min=$row['posts'];
			$max=$row['posts'];
		}
    //Tester si la quantité vendu est inférieur au minimum et le prendre si il l'est
    if($row['posts'] < $min)
		{
			$min=$row['posts'];
		}
    //Tester si la quantité vendu est inférieur au maximum et le prendre si il l'est
    else
		{
			if($row['posts'] > $max)
			 {
			 	$max=$row['posts'];
			}
		}
    $i++;
}
$db->sql_freeresult($result);

//Type mime de l'image
header('Content-type: image/png');
//Chemin vers le police à utiliser
$font_file = './arial.ttf';
//Adapter la largeur de l'image avec le nombre de donnée
$largeur=$i*50+90;
$hauteur=400;
//Hauteur de l'abscisse par rapport au bas de l'image
$absis=80;
//Création de l'image
$courbe=imagecreatetruecolor($largeur, $hauteur);
//Allouer les couleurs à utiliser
$bleu=imagecolorallocate($courbe, 0, 0, 255);
$ligne=imagecolorallocate($courbe, 220, 220, 220);
$fond=imagecolorallocate($courbe, 250, 250, 250);
$noir=imagecolorallocate($courbe, 0, 0, 0);
$rouge=imagecolorallocate($courbe, 255, 0, 0);
//Colorier le fond
imagefilledrectangle($courbe,0 , 0, $largeur, $hauteur, $fond);
//Tracer l'axe des abscisses
imageline($courbe, 50, $hauteur-$absis, $largeur-10,$hauteur-$absis, $noir);
//Tracer l'axe des ordonnées
imageline($courbe, 50,$hauteur-$absis,50,20, $noir);
//Decaler 10px vers le haut le si le minimum est différent de 0
if($min!=0)
{
    $absis+=10;
    $a=10;
}
//Nombres des grides verticales
$nbOrdonne=10;
//Calcul de l'echelle des abscisses
$echelleX=($largeur-100)/$i;
//Calcul de l'echelle des ordonnees
$echelleY=($hauteur-$absis-20)/$nbOrdonne;
$i=$min;
//Calcul des ordonnees des grides
$py=($max-$min)/$nbOrdonne;
$pasY=$absis;
while($pasY<($hauteur-19))
{
    //Affiche la valeur de l'ordonnee
    imagestring($courbe, 2,10 , $hauteur-$pasY-6, round($i), $noir);
    //Trace la gride
    imageline($courbe, 50, $hauteur-$pasY, $largeur-20,$hauteur-$pasY, $ligne);
    //Decaller vers le haut pour la prochaine gride
    $pasY+=$echelleY;
    //Valeur de l'ordonnee suivante
    $i+=$py;
}

$j=-1;
 //Position de la première mois de vente
 $pasX=90;
 //Parcourir le tableau pour le traçage de la diagramme
 foreach ($resultat as $mois => $quantite) {
   //calculer la hateur du point par rapport à sa valeur
   $y=($hauteur) -(($quantite -$min) * ($echelleY/$py))-$absis;
   //dessiner le point
   imagefilledellipse($courbe, $pasX, $y, 6, 6, $rouge);
   //Afficher le mois en français avec une inclinaison de 315°
   imagefttext($courbe, 10, 315, $pasX, $hauteur-$absis+20, $noir, $font_file, $moisFr[substr($mois, 0, 2) -1].' '.substr($mois, 2,4));
   //Tacer une ligne veticale de l'axe de l'abscisse vers le point
   imageline($courbe, $pasX, $hauteur-$absis+$a, $pasX,$y, $noir);
   if($j!==-1)
    {
      //liée le point actuel avec la précédente
      imageline($courbe,($pasX-$echelleX),$yprev,$pasX,$y,$noir);
    }
    //Afficher la valeur au dessus du point
   imagestring($courbe, 2, $pasX-15,$y-14 , $quantite, $bleu);
   $j=$quantite;
   //enregister la hauteur du point actuel pour la liaison avec la suivante
   $yprev=$y;
   //Decaller l'abscisse suivante par rapport à son echelle
   $pasX+=$echelleX;
}
//Envoyer le flux de l'image
imagepng($courbe);
//Desallouer le memoire utiliser par l'image
imagedestroy($courbe);
?>
